/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package DAO;

import clases.Rol;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;

/**
 *
 * @author Rafa
 */
public class DAO_Rol {

    Session sesion = null;

    public DAO_Rol() {
        this.sesion = HibernateUtil.getSessionFactory().getCurrentSession();
    }

    public List<Rol> consultaRoles(boolean iniciar) {
        List<Rol> listaRoles = new ArrayList();
        try {
            if (iniciar) {
                sesion.beginTransaction();
            }
            //sesion.getSessionFactory().getCurrentSession().beginTransaction();

            //Se realiza la consulta
            Query q = sesion.createQuery("from Rol");

            //Se recoge el resultado de la consulta
            listaRoles = (List<Rol>) q.list();
        } catch (Exception e) {
            e.printStackTrace();

        }
        return listaRoles;
    }

    public Rol consultaRol(String nombre, boolean iniciar) {
        Rol rol = null;
        try {
            if (iniciar) {
                sesion.beginTransaction();
            }
            //sesion.getSessionFactory().getCurrentSession().beginTransaction();

            //Se hace la consulta
            Query query = sesion.createQuery("from Rol where nombre = '" + nombre + "'");
        //query.setParameter("nombre", nombre);

            //Se recoge el resultado de la consulta
            rol = (Rol) query.uniqueResult();
        } catch (Exception e) {
            e.printStackTrace();

        }

        return rol;
    }

    public Rol insertaRol(String nombre, boolean iniciar) {
        Rol rol = null;
        try {
            if (iniciar) {
                sesion.beginTransaction();
            }
            //sesion.getSessionFactory().getCurrentSession().beginTransaction();
            rol = new Rol(nombre);

            sesion.save(rol);
            sesion.getTransaction().commit();
        } catch (Exception e) {
            if (sesion.getTransaction() != null) {
                sesion.getTransaction().rollback();
            }
            e.printStackTrace();

        }
        return rol;
    }

    public boolean eliminaRol(String nombre, boolean iniciar) {
        boolean correcto = false;
        try {
            if (iniciar) {
                sesion.beginTransaction();
                sesion.delete(consultaRol(nombre, false));
            } else {
                sesion.delete(consultaRol(nombre, true));
            }
            //sesion.getSessionFactory().getCurrentSession().beginTransaction();

            sesion.getTransaction().commit();
            correcto = true;
        } catch (Exception e) {
            if (sesion.getTransaction() != null) {
                sesion.getTransaction().rollback();
            }
            e.printStackTrace();

        }
        return correcto;
    }
}
